3D人脸技术漫游指南
The following article is from 旷视研究院 Author 闫东
加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!
同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。关注 极市平台 公众号 ,回复 加群,立刻申请入群~
目录
导语
3D人脸基础知识
初识3D人脸
相机模型
3D相机
3D人脸数据
3D人脸相关任务
常见Pipeline
3D人脸识别
3D人脸重建
总结
导语
随着深度学习技术的推进,人脸相关任务研究也跃升为学界和业界的热点。人们所熟知的人脸任务一般包括人脸检测,人脸身份识别,人脸表情识别等,它们多是采用 2D RGB 人脸(一般包括一些纹理信息)作为输入;而 3D 扫描成像技术的出现与发展,使得人脸相关任务有了一条新的探索路线——3D 人脸。
相较于许许多多的 2D 人脸相关任务入门文献/综述文章,3D 人脸的入门知识却乏善可陈。本文将梳理和介绍 3D 人脸相关基础知识,同时总结一些 3D 人脸识别和重建的基础入门文献。
3D人脸基础知识
初识3D人脸
2D/2.5D/3D 人脸
一般所讲的 RGB、灰度、红外人脸图像即为 2D 人脸,它们多为某一视角下表征颜色或纹理的图像,没有空间信息。深度学习用于训练的图像一般为 2D。
2.5D 是在某一个视角下拍摄得到的人脸深度数据,但由于角度问题,它所展示的曲面并不连续,即,当你尝试旋转人脸时,会有一些沟壑似的空洞区域。这是由于拍摄时,没有捕捉到被遮挡部分的深度数据。
那么 3D 人脸呢?它一般由多张不同角度的深度图像合成,完整展示人脸的曲面形状,并且人脸以密集点云的方式呈现在空间中,具有一定的深度信息。
这里有一个问题,经常谈及的 RGB-D 属于什么维度的人脸呢(注意维度与纹理和颜色无关)?
相机模型
了解 3D 人脸相关任务之前,有一个基础且非常重要的“知识点”,就是相机模型,不了解它,就无法入门 3D。关于相机模型,推荐参考《视觉SLAM十四讲》
链接:https://github.com/gaoxiang12/slambook
或者《SlAM入门》
链接:
https://www.cnblogs.com/wangguchangqing/p/8126333.html
本文先用最短时间让大家初步了解相机模型。
相机模型包括 4 种坐标系:像素坐标、图像坐标、相机坐标、世界坐标(脑袋中有没有闪现高中物理老师讲参考系的画面),相机成像过程即是真实三维空间中的三维点映射到成像平面(二维空间)的过程,也称之为射影变换。
相机坐标→图像坐标
相机坐标系到图像坐标系的过程可用小孔成像解释,本文借助相似原理可清楚描述相机坐标系中点
相机小孔成像图示
https://www.cnblogs.com/wangguchangqing/p/8126333.html
相机坐标到图像坐标的齐次表示
图像坐标→像素坐标
一般使用像素值表示 2D 图像,坐标原点通常是图像的左上角,因此像素坐标和成像平面坐标之间,相差了一个缩放和原点的平移。
通过用相机坐标表示图像坐标,可以得到像素坐标与相机坐标的关系:
为保证齐次性(一般很多变换矩阵有这个特性),这里稍作改写:
其中
即经常说的相机内参矩阵(Camera Intrinsics),K 有 4 个未知数和相机的构造相关,f_x,f_y 和相机焦距、像素大小有关,c_x,c_y 是平移的距离,和相机成像平面的大小有关。
世界坐标→相机坐标
其实,相机坐标系并不是一个特别“稳定”的坐标系,因为相机会随着自身移动而改变坐标的原点以及各个坐标轴的方向,这时就需要一个更稳定的坐标系来更好地表示射影变换,而我们通常采用的恒定不变的坐标系为世界坐标系。
相机坐标系与世界坐标系之间相差一个旋转矩阵和平移向量(引自《视觉SLAM十四讲》)
其中变换矩阵
即常说的相机外参(Camera Extrinsics)。
从世界坐标系到像素坐标系相当于一个弱投影过程,总结一下就是从相机坐标系变换到像素坐标系需要相机内参,从相机坐标系变换到世界坐标系下需要相机外参,写成变换式如下:
3D相机
按照相机工作方式可将其分为单目相机(Monocular)、双目相机(Stereo)和深度相机(RGB-D),而相机的本质也是通过二维形式反映三维世界。
单目相机即单个摄像头的相机,由于其在同一时刻只能拍摄某一视角的图像,从而会丢失场景深度。比如,若已知某个像点 P 在成像平面上,由于不知道具体距离,则投影的像素点可以在相机原点与 P 连线上的任意位置,所以出游或者毕业时,可以拍出一张用手托人的错位效果图。
(引自《视觉SLAM十四讲》)
那么如何拍摄一张有深度信息的照片呢?一种方法是通过双目相机获取深度。双目相机顾名思义为“两只眼睛”,左眼相机和右眼相机的光圈中心
(引自《视觉SLAM十四讲》)
随着技术不断演进,深度相机的出现使我们可以更加便捷地获取图像的深度。其中一种深度相机为基于结构光的 RGB-D 相机,以人脸为例,扫描仪会对目标人脸发射光图案(如光栅格),根据其形变计算曲面形状,从而计算人脸的深度信息。
(引自《视觉SLAM十四讲》)
图中还有一个 RGB 摄像头,那么如何实现深度与 RGB 一一对应呢?测量深度之后,RGB-D 相机通常会按照生产时的各个相机摆放位置,完成深度与彩色图像素之间的配对,输出一一对应的彩色图和深度图。我们可以在同一个图像位置,读取到色彩信息和距离信息,计算像素的 3D 相机坐标,生成点云(Point Cloud)。
深度相机中还有一种基于飞行时间原理(Time of Flight,ToF),ToF 相机会向目标发射脉冲光,然后根据发送到返回之间的光束飞行时间,确定物体离自身的距离。ToF 相机与激光传感器不同,可以在发射脉冲光的过程中获取整个图像的像素深度,而激光一般通过逐点扫描获取深度信息。
(引自《视觉SLAM十四讲》)
总结一下,3D 人脸任务一般采用深度相机获取人脸的深度信息,深度相机一般包括双目相机,基于红外结构光原理的 RGB-D 相机(如 Kinect 1 代)或者基于基于光飞行时间原理的 ToF 相机(如 Kinect 2 代)。
3D 人脸数据
3D 人脸相关任务一般有 3 种表征数据的方式:点云,网格图和深度图。
点云(Point cloud)
在三维点云中,每一个点都对应一个三维坐标
点云表示的缺点是每一个点的邻域信息不好获取,因为点的存储一般是无序的。一般情况下,点云数据会用来拟合一个平滑的曲面,以减少噪声的影响。
网格(Mesh)
三维网格使用在三维曲面上预计算好并索引的信息进行表示,相比于点云数据,它需要更多的内存和存储空间,但是由于三维网格的灵活性,更适合用来做一些三维变换,例如仿射变换、旋转和缩放。每一个三维网格数据,由以下元素构成:点、线、三角面。二维纹理的坐标信息也可以存储在点信息中,有利于重建更精确的三维模型。
深度(Depth/Range)
深度图像也称之为 2.5D 或者 Range 图像。三维人脸的 z 轴数值被投影至二维平面,效果类似一个平滑的三维曲面。由于这是一种二维表示方式,所以很多现存的二维图像的处理方法可以直接应用。这种数据可以直接以灰度图的方式展示出来,也可以使用三角剖分原则转换成三维网格。
做 3D 人脸首先必不可少的就是 3D 数据,然而现状却是公开数据少,远少于 2D 人脸图片,3D 高精度人脸只能靠昂贵的设备采集,过程繁琐,本文梳理了现有公开常用的 3D 或 2.5D 人脸数据集,关于数据库和 3D 人脸任务的介绍推荐参考《三维人脸研究》
(http://blog.csdn.net/alec1987/article/details/7469501)。
3D人脸相关任务
常用Pipeline
3D人脸识别
3D 人脸识别的前几十年,都是采用手工设计的特征和分类或度量方法,进行人脸验证和识别。近几年,随着深度学习方法的兴起,逐渐有一些工作采用数据为驱动,进行 3D 人脸识别模型的训练,本文简单总结了一下 3D 人脸识别方法,如下:
1、传统识别方法
基于点云数据的3D人脸识别
Hausdorff 距离通过计算两张人脸的三维点云之间的最近点对之间的最大值,去评估空间中不同真子集之间的距离。但是,该算法依然存在对表情和遮挡不鲁棒的问题,改进的 Hausdorff 距离算法使用三维人脸的轮廓线来筛选数据库中的对象。模板人脸的方法利用三维人脸上的种子点进行形变,拟合到待测试人脸上,利用拟合参数进行人脸识别,并可通过密集的三维人脸点云对齐方法生成特定的可形变人脸模型。
基于面部特征的3D人脸识别
基于面部特征的3D人脸识别可以分为局部特征和全局特征两个方面来讲,具体也可参考
《3D Face Analysis: Advances and Perspectives》
(https://link.springer.com/chapter/10.1007/978-3-319-12484-1_1)
《3D face recognition: a survey》
(https://www.researchgate.net/publication/329202680_3D_face_recognition_a_survey)。
局部特征有两个方面,一是基于面部区域部件信息的特征,例如鼻子、眼睛、嘴巴区域,这类特征可大致分为,基于面部关键点、曲率、块的特征提取方法;二是基于局部描述子算法提取的特征,比如在深度图像上提取小波特征、SIFT、2D-LBP、MRF、LSP,也有在三维数据上进行特征提取的算子,比如 3D-LBP。
全局特征即对整张人脸进行变换并提取特征,人脸数据可能以不同的方式存储,比如点云、图像、Mesh 类型的三维人脸数据,比如将三维人脸模型表征为球面谐波特征(SHF),或者将三维人脸曲面同胚映射到二维网格中,用以稀疏表示,使用稀疏系数作为特征。
2、深度学习识别方法
基于深度图的人脸识别
基于RGB-D的人脸识别
基于 Depth/RGB-3DMM 的人脸识别
3D人脸重建
3D 人脸研究中另一个比较受关注的方向是 3D 人脸重建,即通过一张或多张 RGB 的人脸图像重建出人脸的 3D 模型,它的应用场景很多,比如 Face Animation,dense Face Alignment,Face Attribute Manipulation 等。其实 RGB 到 3D 的人脸重建是一个病态问题,因为 RGB 图像其实表征的是纹理特征而并没有空间信息,但考虑到实际的应用价值,这些年也陆续提出一些 3D 重建方法。 本文将介绍几种比较流行的人脸 3D 重建方法,供入门的小伙伴们参考,更多关于 3D 人脸重建总结推荐参考《3D人脸重建总结》(https://blog.csdn.net/u011681952/article/details/82623328)这里先给出一个 3D 人脸重建的实例(取自PRNet)。
基于传统方法的人脸重建
基于模型的人脸重建
基于 CNN 端到端的人脸重建
该论文的思想也是回归 3DMM 参数,作者认为高层的语义特征可以表示 ID 信息,而中间层的特征可以表示表情特征,因此可从不同的层级回归相应的参数,从而实现 3D 人脸重建任务。
通过上述回归 UV Position Map 的方式有一个问题,最终 UV 图像映射到 3D 人脸 mesh 的图像时,会出现一些条纹。在最近的一些 3D 人脸重建工作中,还有一种通过多级回归 3D 人脸 mesh 的方法取得了不错的重建效果。 该论文作者通过逐级增加回归的 mesh 顶点,从而在多个监督的任务下完成最终 mesh 的回归,同时采用图卷积的形式可以更加本质地进行点与点之间的构图关系,最终取得了不错的重建效果。
总结
-完-
*延伸阅读
添加极市小助手微信(ID : cv-mart),备注:进人脸群-姓名-学校,即可申请加入极市人脸方向技术交流群,更有每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流,一起来让思想之光照的更远吧~
△长按添加极市小助手
△长按关注极市平台
觉得有用麻烦给个在看啦~